package com.xr.miniprogram.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xr.miniprogram.domain.MiniProgramStaff;
import com.xr.miniprogram.domain.vo.MiniProgramStaffOrderVO;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author da
 * @since 2023-09-28
 */
@Service
public interface IMiniProgramStaffService extends IService<MiniProgramStaff> {


    /**
     * 根据用户id与日期获取 服务工人被分配的订单信息列表
     * @param userId
     * @param date
     * @param workStatus 需排除的工作状态
     * @return
     */
    List<MiniProgramStaffOrderVO> getStaffOrderList(Long userId, String date, Long workStatus);

    /**
     * 根据服务日志id 获取服务工人被分配的订单信息
     * @param serviceLogId
     * @return
     */
    MiniProgramStaffOrderVO getStaffOrderByServiceLogId(Long serviceLogId);


    /**
     * 根据userId查询staff
     * @param userId
     * @return
     */
    MiniProgramStaff getByUserId(Long userId);

    /**
     * 更改staff分配状态
     * @param status
     * @return
     */
    Boolean updateStaffStatus(Long staffId, Long status);

    /**
     * 修改工人分配
     * @param serviceLogId
     * @return
     */
    Boolean updateStaffOrder(Long serviceLogId, Long newStaffId);


    /**
     * 查询服务工人
     *
     * @param staffId 服务工人主键
     * @return 服务工人
     */
    public MiniProgramStaff selectMiniProgramStaffByStaffId(Long staffId);

    /**
     * 查询服务工人列表
     *
     * @param mpStaff 服务工人
     * @return 服务工人集合
     */
    public List<MiniProgramStaff> selectMiniProgramStaffList(MiniProgramStaff mpStaff);

    /**
     * 新增服务工人
     *
     * @param mpStaff 服务工人
     * @return 结果
     */
    public int insertMiniProgramStaff(MiniProgramStaff mpStaff);

    /**
     * 修改服务工人
     *
     * @param mpStaff 服务工人
     * @return 结果
     */
    public int updateMiniProgramStaff(MiniProgramStaff mpStaff);

    /**
     * 批量删除服务工人
     *
     * @param staffIds 需要删除的服务工人主键集合
     * @return 结果
     */
    public int deleteMiniProgramStaffByStaffIds(Long[] staffIds);

    /**
     * 删除服务工人信息
     *
     * @param staffId 服务工人主键
     * @return 结果
     */
    public int deleteMiniProgramStaffByStaffId(Long staffId);

    /**
     * 根据userId 获取该服务工人每天的服务单数
     * @param userId
     * @return
     */
    List<HashMap<String, String>> getCountByDate(Long userId);
}
